﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;

namespace Grupo2.Persistencia
{
    public class ExperienciaLaboralDAO
    {
        //Atributos
        private String cadenaConexion = "Data Source=LOCALHOST;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        private SqlConnection conexion;

        public ExperienciaLaboralDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

        //Creando una Experiencia Laboral
        public ExperienciaLaboral CrearExperienciaLaboral(ExperienciaLaboral experienciaLaboral)
        {
            conexion.Open();
            String sentencia = "INSERT INTO Experiencia_Laboral VALUES(" + experienciaLaboral.Id_Experiencia_Laboral + "," +
                                                                experienciaLaboral.Postulante.Id_Postulante + ",'" +
                                                                experienciaLaboral.Nombre_Empresa + "','" +
                                                                experienciaLaboral.Fecha_Inicio + "','" +
                                                                experienciaLaboral.Fecha_Fin + "','" +
                                                                experienciaLaboral.Puesto_Trabajo + "','" +
                                                                experienciaLaboral.Principales_Funciones + "','" +
                                                                experienciaLaboral.Principal_Logro + "')";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerExperienciaLaboral(experienciaLaboral.Id_Experiencia_Laboral); //TODO: Queda pendiente de devolver objeto creado
        }

        //Obteniendo una Experiencia Laboral
        public ExperienciaLaboral ObtenerExperienciaLaboral(Int32 Id_experiencia_laboral)
        {
            conexion.Open();

            String sentencia = "SELECT * FROM Experiencia_Laboral WHERE Id_Experiencia_Laboral='" + Id_experiencia_laboral + "'";
            
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            
            ExperienciaLaboral experienciaLaboral = new ExperienciaLaboral();
            
            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                experienciaLaboral.Id_Experiencia_Laboral = Convert.ToInt32(resultado["Id_Experiencia_Laboral"]);
                experienciaLaboral.Postulante.Id_Postulante = Convert.ToInt32(resultado["Id_postulante"]);
                experienciaLaboral.Nombre_Empresa = (String)resultado["Nombre_Empresa"];
                experienciaLaboral.Fecha_Inicio = (DateTime)resultado["Fecha_Inicio"];
                experienciaLaboral.Fecha_Fin = (DateTime)resultado["Fecha_Fin"];
                experienciaLaboral.Puesto_Trabajo = (String)resultado["Puesto_Trabajo"];
                experienciaLaboral.Principales_Funciones = (String)resultado["Principales_Funciones"];
                experienciaLaboral.Principal_Logro = (String)resultado["Principal_Logro"];
            }
            else // Retornamos una excepción si no existe el registro en la BD
            {
                //throw new Exception("El codigo solicitado no existe en la BD");
                experienciaLaboral = null;
            }
            conexion.Close();
            return experienciaLaboral;
        }

        //Modificando una Experiencia Laboral
        public ExperienciaLaboral ModificarExperienciaLaboral(ExperienciaLaboral experienciaLaboral)
        {
            ExperienciaLaboral experienciaLaboralRegistrado = this.ObtenerExperienciaLaboral(experienciaLaboral.Id_Experiencia_Laboral);
            String sentencia = "UPDATE Experiencia_Laboral " +
                                "SET " +
                                    //"Id_Postulante=@Id_Postulante, " +
                                    "Nombre_Empresa=@Nombre_Empresa, " +
                                    "Fecha_Inicio=@fecha_Inicio, " +
                                    "Fecha_Fin=@fecha_Fin, " +
                                    "Puesto_Trabajo=@Puesto_Trabajo, " +
                                    "Principales_Funciones=@Principales_Funciones, " +
                                    "Principal_Logro=@Principal_Logro, " +
                                    "WHERE " +
                                    "Id_Experiencia_Laboral=@Id_Experiencia_Laboral";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter Id_Experiencia_Laboral = new SqlParameter("@Id_Experiencia_Laboral", System.Data.SqlDbType.NVarChar);
                Id_Experiencia_Laboral.Value = experienciaLaboral.Id_Experiencia_Laboral;
                comando.Parameters.Add(Id_Experiencia_Laboral);

                /*SqlParameter Id_Postulante = new SqlParameter("@Id_Postulante", System.Data.SqlDbType.NVarChar);
                Id_Postulante.Value = experiencia_Laboral.Id_Postulante;
                comando.Parameters.Add(Id_Postulante);*/

                SqlParameter Nombre_Empresa = new SqlParameter("@Nombre_Empresa", System.Data.SqlDbType.Int);
                Nombre_Empresa.Value = experienciaLaboral.Nombre_Empresa;
                comando.Parameters.Add(Nombre_Empresa);

                SqlParameter Fecha_Inicio = new SqlParameter("@Fecha_Inicio", System.Data.SqlDbType.NVarChar);
                Fecha_Inicio.Value = experienciaLaboral.Fecha_Inicio;
                comando.Parameters.Add(Fecha_Inicio);

                SqlParameter Fecha_Fin = new SqlParameter("@Fecha_Fin", System.Data.SqlDbType.NVarChar);
                Fecha_Fin.Value = experienciaLaboral.Fecha_Fin;
                comando.Parameters.Add(Fecha_Fin);

                SqlParameter Puesto_Trabajo = new SqlParameter("@Puesto_Trabajo", System.Data.SqlDbType.NVarChar);
                Puesto_Trabajo.Value = experienciaLaboral.Puesto_Trabajo;
                comando.Parameters.Add(Puesto_Trabajo);

                SqlParameter Principales_Funciones = new SqlParameter("@Principales_Funciones", System.Data.SqlDbType.NVarChar);
                Principales_Funciones.Value = experienciaLaboral.Principales_Funciones;
                comando.Parameters.Add(Principales_Funciones);

                SqlParameter Principal_Logro = new SqlParameter("@Principal_Logro", System.Data.SqlDbType.NVarChar);
                Principal_Logro.Value = experienciaLaboral.Principal_Logro;
                comando.Parameters.Add(Principal_Logro);

                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
            return this.ObtenerExperienciaLaboral(experienciaLaboral.Id_Experiencia_Laboral);
        }

        //Eliminando una Experiencia Laboral
        public void EliminarExperienciaLaboral(Int32 Id_Experiencia_Laboral_A_Eliminar)
        {
            String sentencia = "DELETE FROM Experiencia_Laboral WHERE Id_Experiencia_Laboral=@Id_Experiencia_Laboral_A_Eliminar";
            this.conexion.Open();

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter pk = new SqlParameter("@Id_Experiencia_Laboral_A_Eliminar", System.Data.SqlDbType.NVarChar);
                pk.Value = Id_Experiencia_Laboral_A_Eliminar;
                comando.Parameters.Add(pk);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }
    }
}